Windows® Powershell® is an extensible automation engine consisting of a command-line shell and an associated scripting language. Administrative tasks within Powershell are performed by execution of cmdlets, which are specialized .NET classes implementing particular operations. Such cmdlets may be combined by means of scripts, (compositions of cmdlets along with imperative logic), executables (standalone applications), and/or regular .NET classes (e.g., WMI/COM objects). Cmdlets perform actions, and typically return an object, which may be provided to a next command in a pipeline.
Objects in Powershell are not natively persistent. Therefore, objects only exist within a particular Powershell session or terminal window, and are deleted as soon as the session or terminal window terminates.
One cmdlet for Powershell, called “export-cliXML,” serializes objects into a file. However, the export-cliXML cmdlet has a number of drawbacks that render this cmdlet insufficient for many purposes. Specifically, the export-cliXML cmdlet does not include a data protection or verification mechanism. Therefore, once an object has been serialized to a file, there is no way to tell whether the file has been tampered with or contains corrupt data. Additionally, the export-cliXML cmdlet has no type safety mechanism. Therefore, when an object is serialized, that object's type may be lost, and the object may be treated as a generic object having a general type when it is later de-serialized. This can be a serious issue, since this causes all unique functionality of the object's original type to be lost.
Powershell includes a basic logging facility, that logs standard input/output events that occur within a Powershell pipe. Notably, the logging facility of Powershell is only capable of logging standard input/outputs. The built in logging facility of Powershell cannot record runtime exceptions or other session events, such as those that cause a Powershell session to terminate.